package com.three_lib.baidu;

import android.content.Context;
import android.util.Log;

import com.baidu.location.BDLocation;
import com.baidu.location.BDLocationListener;
import com.baidu.location.LocationClient;
import com.baidu.location.LocationClientOption;
import com.baidu.location.Poi;
import com.baidu.mapapi.SDKInitializer;
import com.baidu.mapapi.map.BitmapDescriptor;
import com.baidu.mapapi.map.BitmapDescriptorFactory;
import com.baidu.mapapi.map.MarkerOptions;
import com.baidu.mapapi.map.OverlayOptions;
import com.three_lib.R;

import java.util.List;

/**
 * @author ocy
 * @time 2016/10/26 23:21
 * @des ${TODU}
 */

public class LocManager {


    private LocationClient mLocationClient = null;
    private static Context context = null;
    private LocationClientOption option;
    private  int scanSpan = 5000;
    private boolean isNeedAddress = true;
    private LocationClientOption.LocationMode tempMode = LocationClientOption.LocationMode.Hight_Accuracy;

    public LocManager(){
        mLocationClient = new LocationClient(context);     //声明LocationClient类
        initLocation();
    }

    public static synchronized void init(Context context) {
        LocManager.context = context.getApplicationContext();
        SDKInitializer.initialize(context);
    }


    //设置坐标图标
    public BitmapDescriptor setLocIcon(int DrawableRes){
        BitmapDescriptor mBitmap;
       if(DrawableRes == 0) {
           //构建Marker图标
           mBitmap = BitmapDescriptorFactory
                   .fromResource(R.drawable.ic_location);
       }else {
           mBitmap = BitmapDescriptorFactory
                   .fromResource(DrawableRes);
       }
        return mBitmap;
    }

    protected void resetLocation() {
        if (option == null) {
            option = new LocationClientOption();
        }
        option.setCoorType(CoorType.BD09LL.toString()); // 设置坐标类型
        option.setScanSpan(scanSpan);
        option.setIsNeedAddress(isNeedAddress);
        option.setLocationMode(tempMode);

        mLocationClient.setLocOption(option);
    }

    public enum CoorType{

        BD09("bd09"),GCJ02("gcj02"),BD09LL("bd09ll");

        private String coortype;

        CoorType(String coortype) {
            this.coortype = coortype;
        }

        public CoorType parseCoorType(String coortype){
            for (CoorType ct : values()){
                if (ct.toString().equalsIgnoreCase(coortype)){
                    return ct;
                }
            }
            throw new ClassCastException();
        }
    }

    public void startLoc(){
        resetLocation();
        mLocationClient.start();
    }
    public void stopLoc(){
        mLocationClient.stop();
    }
    public void registerLocationListener(BDLocationListener locationListener){
        mLocationClient.registerLocationListener(locationListener);    //注册监听函数
    }

    public void unRegisterLocationListener(BDLocationListener locationListener){
        mLocationClient.unRegisterLocationListener(locationListener);    //注册监听函数
    }


    public void initLocation(){
        if (option == null) {
            option = new LocationClientOption();
        }
        option.setLocationMode(LocationClientOption.LocationMode.Hight_Accuracy);//可选，默认高精度，设置定位模式，高精度，低功耗，仅设备
        option.setCoorType(CoorType.BD09LL.toString());//可选，默认gcj02，设置返回的定位结果坐标系
        option.setScanSpan(scanSpan);//可选，默认0，即仅定位一次，设置发起定位请求的间隔需要大于等于1000ms才是有效的
        option.setIsNeedAddress(isNeedAddress);//可选，设置是否需要地址信息，默认不需要
        option.setOpenGps(true);//可选，默认false,设置是否使用gps
        option.setLocationNotify(true);//可选，默认false，设置是否当GPS有效时按照1S/1次频率输出GPS结果
        option.setIsNeedLocationDescribe(true);//可选，默认false，设置是否需要位置语义化结果，可以在BDLocation.getLocationDescribe里得到，结果类似于“在北京天安门附近”
        option.setIsNeedLocationPoiList(true);//可选，默认false，设置是否需要POI结果，可以在BDLocation.getPoiList里得到
        option.setIgnoreKillProcess(false);//可选，默认true，定位SDK内部是一个SERVICE，并放到了独立进程，设置是否在stop的时候杀死这个进程，默认不杀死
        option.SetIgnoreCacheException(false);//可选，默认false，设置是否收集CRASH信息，默认收集
        option.setEnableSimulateGps(false);//可选，默认false，设置是否需要过滤GPS仿真结果，默认需要
        mLocationClient.setLocOption(option);
    }

}
